import * as Tween from '@tweenjs/tween.js';

/**
 * Easing functions for use with TweenCollection.  These function are from
 {@link https://github.com/sole/tween/|Tween} and Robert Penner.  See the
 {@link http://sole.github.io/tween/examples/03_graphs.html|Tween graphs for each function}.
  */
const EasingFunction = {
    /**
   * Linear easing.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    LINEAR_NONE: Tween.Easing.Linear.None,

    /**
   * Quadratic in.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    QUADRATIC_IN: Tween.Easing.Quadratic.In,
    /**
   * Quadratic out.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    QUADRATIC_OUT: Tween.Easing.Quadratic.Out,
    /**
   * Quadratic in then out.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    QUADRATIC_IN_OUT: Tween.Easing.Quadratic.InOut,

    /**
   * Cubic in.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    CUBIC_IN: Tween.Easing.Cubic.In,
    /**
   * Cubic out.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    CUBIC_OUT: Tween.Easing.Cubic.Out,
    /**
   * Cubic in then out.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    CUBIC_IN_OUT: Tween.Easing.Cubic.InOut,

    /**
   * Quartic in.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    QUARTIC_IN: Tween.Easing.Quartic.In,
    /**
   * Quartic out.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    QUARTIC_OUT: Tween.Easing.Quartic.Out,
    /**
   * Quartic in then out.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    QUARTIC_IN_OUT: Tween.Easing.Quartic.InOut,

    /**
   * Quintic in.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    QUINTIC_IN: Tween.Easing.Quintic.In,
    /**
   * Quintic out.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    QUINTIC_OUT: Tween.Easing.Quintic.Out,
    /**
   * Quintic in then out.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    QUINTIC_IN_OUT: Tween.Easing.Quintic.InOut,

    /**
   * Sinusoidal in.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    SINUSOIDAL_IN: Tween.Easing.Sinusoidal.In,
    /**
   * Sinusoidal out.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    SINUSOIDAL_OUT: Tween.Easing.Sinusoidal.Out,
    /**
   * Sinusoidal in then out.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    SINUSOIDAL_IN_OUT: Tween.Easing.Sinusoidal.InOut,

    /**
   * Exponential in.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    EXPONENTIAL_IN: Tween.Easing.Exponential.In,
    /**
   * Exponential out.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    EXPONENTIAL_OUT: Tween.Easing.Exponential.Out,
    /**
   * Exponential in then out.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    EXPONENTIAL_IN_OUT: Tween.Easing.Exponential.InOut,

    /**
   * Circular in.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    CIRCULAR_IN: Tween.Easing.Circular.In,
    /**
   * Circular out.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    CIRCULAR_OUT: Tween.Easing.Circular.Out,
    /**
   * Circular in then out.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    CIRCULAR_IN_OUT: Tween.Easing.Circular.InOut,

    /**
   * Elastic in.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    ELASTIC_IN: Tween.Easing.Elastic.In,
    /**
   * Elastic out.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    ELASTIC_OUT: Tween.Easing.Elastic.Out,
    /**
   * Elastic in then out.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    ELASTIC_IN_OUT: Tween.Easing.Elastic.InOut,

    /**
   * Back in.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    BACK_IN: Tween.Easing.Back.In,
    /**
   * Back out.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    BACK_OUT: Tween.Easing.Back.Out,
    /**
   * Back in then out.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    BACK_IN_OUT: Tween.Easing.Back.InOut,

    /**
   * Bounce in.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    BOUNCE_IN: Tween.Easing.Bounce.In,
    /**
   * Bounce out.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    BOUNCE_OUT: Tween.Easing.Bounce.Out,
    /**
   * Bounce in then out.
   *
   * @type {EasingFunction.Callback}
   * @constant
   */
    BOUNCE_IN_OUT: Tween.Easing.Bounce.InOut
};

export { EasingFunction };
